#pragma once // include guard


// standard library includes
#include <iostream>
#include <string>
#include <fstream>
#include <string>
// end standard library includes

// pdfwriter library includes
#include "PDFWriter/PDFWriter.h"
#include "PDFWriter/PDFPage.h"
#include "PDFWriter/PageContentContext.h"
#include "PDFWriter/PDFFormXObject.h"
#include "PDFWriter/ResourcesDictionary.h"
#include "PDFWriter/PDFUsedFont.h"
// end pdfwriter library includes

using namespace PDFHummus;

//
//基础功能函数
//

void File_existence_judgment(const std::string &filename); //判断一个文件是否存在
std::pair <double, double> Get_page_size(const std::string page_name); //页面尺寸

//读取文件数据
void Get_date(std::vector <std::string> *info_picture, std::vector <std::string> *info_text,
              std::vector <std::pair<int, int>> * info_coord_1,
              std::vector <std::pair<int, int>> * info_coord_2,
              std::vector <std::pair<int, int>> *  info_coord_3,
              std::vector <std::pair<int, int>> * info_coord_4,
              const std::string input_name,
              const int Box_x_fine_tuning, //对文本框坐标进行微调，单位是像素
              const int Box_y_fine_tuning);

// 将图片的坐标原点换算为当前左下角的坐标原点
// 这里只是将原点换成图片的左下角，并不是页面的原点
void Coordinate_origin_transform(std::vector <std::pair<int, int>> * info_coord_1,
                                 std::vector <std::pair<int, int>> * info_coord_2,
                                 std::vector <std::pair<int, int>> *  info_coord_3,
                                 std::vector <std::pair<int, int>> * info_coord_4,
                                 const DoubleAndDoublePair picD,
                                 const int origin_state, //默认值为 4 ，即左上
                                 const int i_start, //相关内容的索引编号
                                 const int i_end);

//计算图片的缩放比例
double Get_picture_scale(std::pair <double, double> p, DoubleAndDoublePair picD);

//计算图片在页面上的位置：上下、左右居中
std::pair <double, double> Get_PicInPage_position(std::pair <double, double> p, DoubleAndDoublePair picD);


// 根据图片的位置，及缩放，重新计算文本框各点坐标
void Get_new_box_coordinate(std::vector <std::pair<int, int>> * info_coord_1,
                            std::vector <std::pair<int, int>> * info_coord_2,
                            std::vector <std::pair<int, int>> *  info_coord_3,
                            std::vector <std::pair<int, int>> * info_coord_4,
                            const double scale_ratio,
                            const std::pair <double, double> pic_position,
                            const int i_start, //相关内容的索引编号
                            const int i_end);

//根据字体与文体框大小，计算所需字体大小
double Get_text_font_size(std::pair <int, int> *c_1, //坐标信息
                          std::pair <int, int> *c_2,
                          std::pair <int, int> *c_3,
                          std::pair <int, int> *c_4,
                          std::string *text, //文本
                          PDFUsedFont* use_font //字体信息
                          );

//
//PDF操作函数
//
//写入某图像的OCR信息
void Write_picture_ocr_info(std::pair <double, double> page_size_pair, //页面大小
                            PDFWriter * pdfWriter, //PDF 写入对像
                            PDFUsedFont* use_font, //PDF 字体
                            bool draw_rectangle_bool, // 是否画出矩形文本框
                            AbstractContentContext::GraphicOptions pathStrokeOptions, //矩形文本框样式
                            std::string pic_name, //图片名
                            const int origin_position, //OCR图片结果中坐标的原点位置
                            std::vector <std::pair<int, int>> * info_coord_1, //相应数据
                            std::vector <std::pair<int, int>> * info_coord_2,
                            std::vector <std::pair<int, int>> *  info_coord_3,
                            std::vector <std::pair<int, int>> * info_coord_4,
                            std::vector <std::string> * info_text,
                            const int i_start, //相关内容的索引编号
                            const int i_end );



